﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace Vms.DB
{
    public class Fortune : Inf_Fortune
    {
        string[] can = new string[10] { "Canh", "Tan", "Nham", "Quy", "Giap", "At", "Binh", "Dinh", "Mau", "Ky" };
        string[] chi = new string[12] { "Than", "Dau", "Tuat", "Hoi", "Ty", "Suu", "Dan", "Mao", "Thin", "Ti", "Ngo", "Mui" };
        string[] menhnam = new string[9] { "Khon Tho", "Kham Thuy", "Ly Hoa", "Can Tho", "Doai Kim", "Can Kim", "Khon Tho", "Ton Moc", "Chan Moc" };
        string[] menhnu = new string[] { "Ton moc", "Khon Tho", "Can Kim", "Doai Kim", "Can Tho", "Ly Hoa", "Kham Thuy", "Khon Tho", "Chan Moc" };
        string[] nguhanh = new string[] { "KIM", "KIM", "hoar", "hoar", "MOC", "MOC", "THO", "THO", "KIM", "KIM", "hoar", "hoar", "THUY", "THUY", "THO", "THO", "KIM", "KIM", "MOC", "MOC", "THUY", "THUY", "THO", "THO", "hoar", "hoar", "MOC", "MOC", "THUY", "THUY", "KIM", "KIM", "hoar", "hoar", "MOC", "MOC", "THO", "THO", "KIM", "KIM", "hoar", "hoar", "THUY", "THUY", "THO", "THO", "KIM", "KIM", "MOC", "MOC", "THUY", "THUY", "THO", "THO", "hoar", "hoar", "MOC", "MOC", "THUY", "THUY", "KIM", "KIM", "hoar", "hoar", "MOC", "MOC", "THO", "THO", "KIM", "KIM", "hoar", "hoar", "THUY", "THUY", "THO", "THO", "KIM", "KIM", "MOC", "MOC", "THUY", "THUY", "THO", "THO", "hoar", "hoar", "MOC", "MOC", "THUY", "THUY", "KIM", "KIM", "hoar", "hoar", "MOC", "MOC", "THO", "THO", "KIM", "KIM", "hoar", "hoar", "THUY", "THUY", "THO", "THO", "KIM", "KIM", "MOC", "MOC", "THUY", "THUY", "THO", "THO", "hoar", "hoar", "MOC", "MOC", "THUY", "THUY" };
        string[] nguhanh_note = new string[] { "Thạch Lựu Mộc", "Thạch Lựu Mộc", "Đại Hải Thủy", "Đại Hải Thủy", "Hải Trung Kim", "Hải Trung Kim", "Lư Trung Hỏa", "Lư Trung Hỏa", "Đại Lâm Mộc", "Đại Lâm Mộc", "Lộ Bàng Thổ", "Lộ Bàng Thổ", "Kiếm Phong Kim", "Kiếm Phong Kim", "Sơn Đầu Hỏa", "Sơn Đầu Hỏa", "Giảm Hạ Thủy", "Giảm Hạ Thủy", "Thành Đầu Thổ", "Thành Đầu Thổ", "Bạch Lạp Kim", "Bạch Lạp Kim", "Dương Liễu Mộc", "Dương Liễu Mộc", "Tuyền Trung Thủy", "Tuyền Trung Thủy", "Ốc Thượng Thổ", "Ốc Thượng Thổ", "Thích Lịch Hỏa", "Thích Lịch Hỏa", "Tùng Bách Mộc", "Tùng Bách Mộc", "Trường Lưu Thủy", "Trường Lưu Thủy", "Sa Trung Kim", "Sa Trung Kim", "Sơn Hạ Hỏa", "Sơn Hạ Hỏa", "Bình Địa Mộc", "Bình Địa Mộc", "Bích Thượng Thổ", "Bích Thượng Thổ", "Kim Bạch Kim", "Kim Bạch Kim", "Phú Đăng Hỏa", "Phú Đăng Hỏa", "Thiên Hà Thủy", "Thiên Hà Thủy", "Đại Trạch Thổ", "Đại Trạch Thổ", "Thoa Xuyến Kim", "Thoa Xuyến Kim", "Tang Đố Mộc", "Tang Đố Mộc", "Đại Khe Thủy", "Đại Khe Thủy", "Sa Trung Thổ", "Sa Trung Thổ", "Thiên Thượng Hỏa", "Thiên Thượng Hỏa" };
        string[] nguhanh_list = new string[] { "KIM", "MOC", "THUY", "hoar", "THO" };
        public string[] ngayhoangdao = new string[12];
        public string[] thapnhibattu = new string[28];

        public int[,] Que_List = new int[8, 8];
        public string[] Que_Detail = new string[65];
        public int[] Que_Diem = new int[65];

        string[,] nguhanh_arr = new string[10, 3];
        string[,] mauhoptuoi_arr = new string[5, 2];
        public int am = 0, duong = 0;
        #region LucalCalendar
        public string ChuyenNamDuongAm(string namDuong)
        {
            string namAm = "";

            return namAm;
        }

        private double timeZone = 7.0;

        public long getJulius(int intNgay, int intThang, int intNam)
        {
            int a, y, m, jd;
            a = (int)((14 - intThang) / 12);
            y = intNam + 4800 - a;
            m = intThang + 12 * a - 3;
            jd = intNgay + (int)((153 * m + 2) / 5) + 365 * y + (int)(y / 4) - (int)(y / 100) + (int)(y / 400) - 32045;
            if (jd < 2299161)
            {
                jd = intNgay + (int)((153 * m + 2) / 5) + 365 * y + (int)(y / 4) - 32083;
            }
            return jd;
        }

        // Từ ngày Julius chuyển ra ngày thường
        public string jdToDate(int jd)
        {
            int a, b, c, d, e, m;
            int day, month, year;
            if (jd > 2299160)
            { // After 5/10/1582, Gregorian calendar
                a = jd + 32044;
                b = (int)((4 * a + 3) / 146097);
                c = a - (int)((b * 146097) / 4);
            }
            else
            {
                b = 0;
                c = jd + 32082;
            }
            d = (int)((4 * c + 3) / 1461);
            e = c - (int)((1461 * d) / 4);
            m = (int)((5 * e + 2) / 153);
            day = e - (int)((153 * m + 2) / 5) + 1;
            month = m + 3 - 12 * (int)(m / 10);
            year = b * 100 + d - 4800 + (int)(m / 10);
            return day.ToString() + "/" + month.ToString() + "/" + year.ToString();
        }

        //Tính ngày Sóc
        public int getNewMoonDay(int k)
        {
            double T, T2, T3, dr, Jd1, M, Mpr, F, C1, deltat, JdNew;
            T = k / 1236.85;
            T2 = T * T;
            T3 = T2 * T;
            dr = Math.PI / 180;
            Jd1 = 2415020.75933 + 29.53058868 * k + 0.0001178 * T2 - 0.000000155 * T3;
            // Mean new moon
            Jd1 = Jd1 + 0.00033 * Math.Sin((166.56 + 132.87 * T - 0.009173 * T2) * dr);
            // Sun's mean anomaly
            M = 359.2242 + 29.10535608 * k - 0.0000333 * T2 - 0.00000347 * T3;
            // Moon's mean anomaly 
            Mpr = 306.0253 + 385.81691806 * k + 0.0107306 * T2 + 0.00001236 * T3;
            // Moon's argument of latitude
            F = 21.2964 + 390.67050646 * k - 0.0016528 * T2 - 0.00000239 * T3;
            C1 = (0.1734 - 0.000393 * T) * Math.Sin(M * dr) + 0.0021 * Math.Sin(2 * dr * M);
            C1 = C1 - 0.4068 * Math.Sin(Mpr * dr) + 0.0161 * Math.Sin(dr * 2 * Mpr);
            C1 = C1 - 0.0004 * Math.Sin(dr * 3 * Mpr);
            C1 = C1 + 0.0104 * Math.Sin(dr * 2 * F) - 0.0051 * Math.Sin(dr * (M + Mpr));
            C1 = C1 - 0.0074 * Math.Sin(dr * (M - Mpr)) + 0.0004 * Math.Sin(dr * (2 * F + M));
            C1 = C1 - 0.0004 * Math.Sin(dr * (2 * F - M)) - 0.0006 * Math.Sin(dr * (2 * F + Mpr));
            C1 = C1 + 0.0010 * Math.Sin(dr * (2 * F - Mpr)) + 0.0005 * Math.Sin(dr * (2 * Mpr + M));
            if (T < -11)
            {
                deltat = 0.001 + 0.000839 * T + 0.0002261 * T2 - 0.00000845 * T3 - 0.000000081 * T * T3;
            }
            else
            {
                deltat = -0.000278 + 0.000265 * T + 0.000262 * T2;
            }
            JdNew = Jd1 + C1 - deltat;
            return (int)(JdNew + 0.5 + timeZone / 24);
        }

        //Tính toạ độ mặt trời
        public int getSunLongitude(int jdn)
        {
            double T, T2, dr, M, L0, DL, L;
            // Time in Julian centuries from 2000-01-01 12:00:00 GMT
            T = (jdn - 2451545.5 - timeZone / 24) / 36525;
            T2 = T * T;
            dr = Math.PI / 180; // degree to radian
            // mean anomaly, degree
            M = 357.52910 + 35999.05030 * T - 0.0001559 * T2 - 0.00000048 * T * T2; L0 = 280.46645 + 36000.76983 * T + 0.0003032 * T2; // mean longitude, degree
            DL = (1.914600 - 0.004817 * T - 0.000014 * T2) * Math.Sin(dr * M);
            DL = DL + (0.019993 - 0.000101 * T) * Math.Sin(dr * 2 * M) + 0.000290 * Math.Sin(dr * 3 * M);
            L = L0 + DL; // true longitude, degree
            L = L * dr;
            L = L - Math.PI * 2 * (int)(L / (Math.PI * 2)); // Normalize to (0, 2*PI)
            return (int)(L / Math.PI * 6);
        }

        //Tìm ngày bắt đầu tháng 11 âm lịch 
        public int getLunarMonthll(int intNam)
        {
            double k, off, nm, sunLong;
            off = getJulius(31, 12, intNam) - 2415021;
            k = (int)(off / 29.530588853);
            nm = getNewMoonDay((int)k);
            sunLong = getSunLongitude((int)nm); // sun longitude at local midnight
            if (sunLong >= 9)
            {
                nm = getNewMoonDay((int)k - 1);
            }
            return (int)nm;
        }

        //Xác định tháng nhuận
        public int getLeapMonthOffset(double a11)
        {
            double last, arc;
            int k, i;
            k = (int)((a11 - 2415021.076998695) / 29.530588853 + 0.5);
            last = 0;
            i = 1; // We start with the month following lunar month 11
            arc = getSunLongitude((int)getNewMoonDay((int)(k + i)));
            do
            {
                last = arc;
                i++;
                arc = getSunLongitude((int)getNewMoonDay((int)(k + i)));
            } while (arc != last && i < 14);
            return i - 1;
        }

        //Đổi ngày dương ra ngày âm
        public string convertSolar2Lunar(string daymonthy)
        {
            int intNgay;
            int intThang;
            int intNam;
            intNgay = Int32.Parse(daymonthy.Substring(0, 2));
            intThang = Int32.Parse(daymonthy.Substring(2, 2));
            intNam = Int32.Parse(daymonthy.Substring(4, 4));
            double dayNumber, monthStart, a11, b11, lunarDay, lunarMonth, lunarYear;
            //double lunarLeap;
            int k, diff;
            dayNumber = getJulius(intNgay, intThang, intNam);
            k = (int)((dayNumber - 2415021.076998695) / 29.530588853);
            monthStart = getNewMoonDay(k + 1);
            if (monthStart > dayNumber)
            {
                monthStart = getNewMoonDay(k);
            }
            a11 = getLunarMonthll(intNam);
            b11 = a11;
            if (a11 >= monthStart)
            {
                lunarYear = intNam;
                a11 = getLunarMonthll(intNam - 1);
            }
            else
            {
                lunarYear = intNam + 1;
                b11 = getLunarMonthll(intNam + 1);
            }
            lunarDay = dayNumber - monthStart + 1;
            diff = (int)((monthStart - a11) / 29);
            //lunarLeap = 0;
            lunarMonth = diff + 11;
            if (b11 - a11 > 365)
            {
                int leapMonthDiff = getLeapMonthOffset(a11);
                if (diff >= leapMonthDiff)
                {
                    lunarMonth = diff + 10;
                    if (diff == leapMonthDiff)
                    {
                        //lunarLeap = 1;
                    }
                }
            }
            if (lunarMonth > 12)
            {
                lunarMonth = lunarMonth - 12;
            }
            if (lunarMonth >= 11 && diff < 4)
            {
                lunarYear -= 1;
            }
            string strNgay = lunarDay.ToString();
            string strThang = lunarMonth.ToString();
            string strNam = lunarYear.ToString();
            return strNgay + "/" + strThang + "/" + strNam;
        }
        #endregion LucalCalendar
        public int AmDuong(string number)
        {
            am = 0; duong = 0;
            char[] AmArr = { '2', '4', '7', '8' };
            char[] DuongArr = { '1', '3', '6', '9' };
            char[] numberArr = number.ToCharArray();


            for (int i = 0; i < numberArr.Length; i++)
            {
                for (int j = 0; j < AmArr.Length; j++)
                {
                    if (AmArr[j] == numberArr[i]) am++;
                }
                for (int k = 0; k < DuongArr.Length; k++)
                {
                    if (DuongArr[k] == numberArr[i]) duong++;
                }
            }
            if (am == duong)
                return 0;
            else if (am > duong)
                return -1;
            else return 1;
        }
        public short ThienThoi(string number)
        {
            int returnNumber = 0;
            returnNumber = number.Length - number.Replace("8", "").Length;
            if (returnNumber == 0)
                return 0;
            else if (returnNumber == 1)
                return 1;
            else
                return 2;

        }
        #region QuanNiem

        public short QuanNiemSum(string number)
        {
            short sum = 0;
            foreach (char digit in number)
            {
                short i = Convert.ToInt16(digit);
                sum += i;
            }
            return Convert.ToInt16(sum % 10);
        }
        public short QuanNiemTuQuy(string number)
        {
            char[] numberChar = number.ToCharArray();
            short returnNumber = 0;
            for (int i = 0; i < number.Length - 3; i++)
            {
                if ((numberChar[i].Equals(numberChar[i + 1])) && (numberChar[i + 1].Equals(numberChar[i + 2])) && (numberChar[i + 2].Equals(numberChar[i + 3])))
                {
                    returnNumber = 5;
                    break;

                }
            }
            return returnNumber;

        }
        public short QuanNiemLocphat(string number)
        {
            if ((number.Contains("68")) || (number.Contains("86")) || (number.Contains("66")) || (number.Contains("88")) || (number.EndsWith("07")) || (number.EndsWith("04")))
                return 5;
            else
                return 0;
        }
        public short QuanNiemSotien(string number)
        {
            char[] numberChar = number.ToCharArray();
            short returnNumber = 0;
            int i = number.Length - 4;
            if ((numberChar[i] <= numberChar[i + 1]) && (numberChar[i + 1] <= numberChar[i + 2]) && (numberChar[i + 2] <= (numberChar[i + 3])))
            {
                returnNumber = 5;

            }

            return returnNumber;

        }

        #endregion QuanNiem
        #region QuaiKhi

        public void InitQuaiKhi()
        {
            #region Can-
            Que_List[0, 0] = 1;
            Que_List[0, 1] = 25;
            Que_List[0, 2] = 6;
            Que_List[0, 3] = 33;
            Que_List[0, 4] = 12;
            Que_List[0, 5] = 44;
            Que_List[0, 6] = 13;
            Que_List[0, 7] = 10;
            #endregion Can-

            #region Chan
            Que_List[1, 0] = 34;
            Que_List[1, 1] = 51;
            Que_List[1, 2] = 40;
            Que_List[1, 3] = 62;
            Que_List[1, 4] = 16;
            Que_List[1, 5] = 32;
            Que_List[1, 6] = 55;
            Que_List[1, 7] = 54;
            #endregion Chan

            #region Kham
            Que_List[2, 0] = 5;
            Que_List[2, 1] = 3;
            Que_List[2, 2] = 29;
            Que_List[2, 3] = 39;
            Que_List[2, 4] = 8;
            Que_List[2, 5] = 48;
            Que_List[2, 6] = 63;
            Que_List[2, 7] = 60;
            #endregion Kham

            #region Can'
            Que_List[3, 0] = 26;
            Que_List[3, 1] = 27;
            Que_List[3, 2] = 4;
            Que_List[3, 3] = 52;
            Que_List[3, 4] = 23;
            Que_List[3, 5] = 18;
            Que_List[3, 6] = 22;
            Que_List[3, 7] = 41;
            #endregion Can'

            #region Khon
            Que_List[4, 0] = 11;
            Que_List[4, 1] = 24;
            Que_List[4, 2] = 7;
            Que_List[4, 3] = 15;
            Que_List[4, 4] = 2;
            Que_List[4, 5] = 46;
            Que_List[4, 6] = 36;
            Que_List[4, 7] = 19;
            #endregion Khon

            #region Ton
            Que_List[5, 0] = 9;
            Que_List[5, 1] = 42;
            Que_List[5, 2] = 59;
            Que_List[5, 3] = 53;
            Que_List[5, 4] = 20;
            Que_List[5, 5] = 57;
            Que_List[5, 6] = 37;
            Que_List[5, 7] = 61;
            #endregion Ton

            #region Ly
            Que_List[6, 0] = 14;
            Que_List[6, 1] = 21;
            Que_List[6, 2] = 64;
            Que_List[6, 3] = 56;
            Que_List[6, 4] = 35;
            Que_List[6, 5] = 50;
            Que_List[6, 6] = 30;
            Que_List[6, 7] = 38;
            #endregion Ly

            #region Doai
            Que_List[7, 0] = 43;
            Que_List[7, 1] = 17;
            Que_List[7, 2] = 47;
            Que_List[7, 3] = 31;
            Que_List[7, 4] = 45;
            Que_List[7, 5] = 28;
            Que_List[7, 6] = 49;
            Que_List[7, 7] = 58;
            #endregion Doai

            #region Que_Detail
            Que_Detail[1] = "quethuancan";
            Que_Diem[1] = 2;

            Que_Detail[2] = "quethuankhon";
            Que_Diem[2] = 2;

            Que_Detail[3] = "quethuyloichuan";
            Que_Diem[3] = 1;

            Que_Detail[4] = "quesonthuymong";
            Que_Diem[4] = 0;

            Que_Detail[5] = "quethuythienthu";
            Que_Diem[5] = 1;

            Que_Detail[6] = "quethienthuytung";
            Que_Diem[6] = 0;

            Que_Detail[7] = "quediathuysu";
            Que_Diem[7] = 1;

            Que_Detail[8] = "quethuydiaty";
            Que_Diem[8] = 1;

            Que_Detail[9] = "quephongthientieusuc";
            Que_Diem[9] = 0;

            Que_Detail[10] = "quethientrachly";
            Que_Diem[10] = 1;

            Que_Detail[11] = "quediathienthai";
            Que_Diem[11] = 2;

            Que_Detail[12] = "quethiendiabi";
            Que_Diem[12] = 0;

            Que_Detail[13] = "quethienhoadongnhan";
            Que_Diem[13] = 2;

            Que_Detail[14] = "quehoathiendaihuu";
            Que_Diem[14] = 2;

            Que_Detail[15] = "quediasonkhiem";
            Que_Diem[1] = 1;

            Que_Detail[16] = "queloidiadu";
            Que_Diem[16] = 2;

            Que_Detail[17] = "quetrachloituy";
            Que_Diem[17] = 1;

            Que_Detail[18] = "quesonphongco";
            Que_Diem[18] = 0;

            Que_Detail[19] = "quediatrachlam";
            Que_Diem[19] = 2;

            Que_Detail[20] = "quephongdiaquan";
            Que_Diem[20] = 1;

            Que_Detail[21] = "quehoaloiphehap";
            Que_Diem[21] = 1;

            Que_Detail[22] = "quesonhoabi";
            Que_Diem[22] = 2;

            Que_Detail[23] = "quesondiabac";
            Que_Diem[23] = 0;

            Que_Detail[24] = "quedialoiphuc";
            Que_Diem[24] = 2;

            Que_Detail[25] = "quethienloivovong";
            Que_Diem[25] = 0;

            Que_Detail[26] = "quesonthiendaisuc";
            Que_Diem[26] = 2;

            Que_Detail[27] = "quesonloidi";
            Que_Diem[27] = 1;

            Que_Detail[28] = "quetrachphongdaiquai";
            Que_Diem[28] = 2;

            Que_Detail[29] = "quethuankham";
            Que_Diem[29] = 0;

            Que_Detail[30] = "quethuanly";
            Que_Diem[30] = 1;

            Que_Detail[31] = "quetrachsonham";
            Que_Diem[31] = 1;

            Que_Detail[32] = "queloiphonghang";
            Que_Diem[1] = 1;

            Que_Detail[33] = "quethiensondon";
            Que_Diem[33] = 0;

            Que_Detail[34] = "queloithiendaitrang";
            Que_Diem[34] = 2;

            Que_Detail[35] = "quehoadiatan";
            Que_Diem[35] = 1;

            Que_Detail[36] = "quediahoaminhdi";
            Que_Diem[36] = 0;

            Que_Detail[37] = "quephonghoagianhan";
            Que_Diem[37] = 1;

            Que_Detail[38] = "quehoatrachkhue";
            Que_Diem[38] = 0;

            Que_Detail[39] = "quethuysonkien";
            Que_Diem[39] = 0;

            Que_Detail[40] = "queloithuygiai";
            Que_Diem[40] = 2;

            Que_Detail[41] = "quesontrachton";
            Que_Diem[41] = 0;

            Que_Detail[42] = "quephongloiich";
            Que_Diem[42] = 2;

            Que_Detail[43] = "quetrachthienquai";
            Que_Diem[43] = 1;

            Que_Detail[44] = "quethienphongcau";
            Que_Diem[44] = 1;

            Que_Detail[45] = "quetrachdiatuy";
            Que_Diem[45] = 1;

            Que_Detail[46] = "quediaphongthang";
            Que_Diem[46] = 2;

            Que_Detail[47] = "quetrachthuykhon";
            Que_Diem[47] = 0;

            Que_Detail[48] = "quethuyphongtinh";
            Que_Diem[1] = 2;

            Que_Detail[49] = "quetrachhoacach";
            Que_Diem[49] = 1;

            Que_Detail[50] = "quehoaphongdinh";
            Que_Diem[50] = 2;

            Que_Detail[51] = "quethuanchan";
            Que_Diem[51] = 0;

            Que_Detail[52] = "quethuancaan";
            Que_Diem[52] = 1;

            Que_Detail[53] = "quephongsontiem";
            Que_Diem[53] = 1;

            Que_Detail[54] = "queloitrachquymuoi";
            Que_Diem[54] = 0;

            Que_Detail[55] = "queloihoaphong";
            Que_Diem[55] = 2;

            Que_Detail[56] = "quehoasonlu";
            Que_Diem[56] = 0;

            Que_Detail[57] = "quethuanton";
            Que_Diem[57] = 0;

            Que_Detail[58] = "quethuandoai";
            Que_Diem[58] = 2;

            Que_Detail[59] = "quephongthuyhoan";
            Que_Diem[59] = 0;

            Que_Detail[60] = "quethuytrachtiet";
            Que_Diem[60] = 1;

            Que_Detail[61] = "quephongtrachtrungphu";
            Que_Diem[61] = 2;

            Que_Detail[62] = "queloisontieuqua";
            Que_Diem[62] = 0;

            Que_Detail[63] = "quethuyhoakyte";
            Que_Diem[63] = 1;

            Que_Detail[64] = "quethuyhoavite";
            Que_Diem[64] = 0;

            #endregion Que_Detail
        }
        public int QuaiKhi(string number)
        {
            InitQuaiKhi();
            int length = number.Length;
            string str_noi_quai = "", str_ngoai_quai = "";

            str_ngoai_quai = number.Substring(0, length / 2);
            str_noi_quai = number.Replace(str_ngoai_quai, "");

            int sum_ngoaiquai = 0, sum_noiquai = 0;
            foreach (char digit in str_ngoai_quai)
            {
                sum_ngoaiquai += Convert.ToInt32(digit);
            }
            foreach (char digit in str_noi_quai)
            {
                sum_noiquai += Convert.ToInt32(digit);
            }

            int ngoaiquai = sum_ngoaiquai % 8;
            int noiquai = sum_noiquai % 8;

            return Que_List[ngoaiquai, noiquai];
        }

        #endregion QuaiKhi
        #region Ngu Hanh
        public void InitNguhanh()
        {
            nguhanh_arr[0, 0] = "THUY";
            nguhanh_arr[0, 1] = "MOC";
            nguhanh_arr[0, 2] = "1";

            nguhanh_arr[1, 0] = "MOC";
            nguhanh_arr[1, 1] = "hoarR";
            nguhanh_arr[1, 2] = "1";

            nguhanh_arr[2, 0] = "hoarR";
            nguhanh_arr[2, 1] = "THO";
            nguhanh_arr[2, 2] = "1";

            nguhanh_arr[3, 0] = "THO";
            nguhanh_arr[3, 1] = "THO";
            nguhanh_arr[3, 2] = "1";

            nguhanh_arr[4, 0] = "KIM";
            nguhanh_arr[4, 1] = "THUY";
            nguhanh_arr[4, 2] = "1";

            nguhanh_arr[5, 0] = "MOC";
            nguhanh_arr[5, 1] = "THO";
            nguhanh_arr[5, 2] = "-1";

            nguhanh_arr[6, 0] = "THO";
            nguhanh_arr[6, 1] = "THUY";
            nguhanh_arr[6, 2] = "-1";

            nguhanh_arr[7, 0] = "THUY";
            nguhanh_arr[7, 1] = "hoarR";
            nguhanh_arr[7, 2] = "-1";

            nguhanh_arr[8, 0] = "hoarR";
            nguhanh_arr[8, 1] = "KIM";
            nguhanh_arr[8, 2] = "-1";

            nguhanh_arr[9, 0] = "KIM";
            nguhanh_arr[9, 1] = "MOC";
            nguhanh_arr[9, 2] = "-1";
        }

        /*
         * Neu Tuong sinh result = 1, tuong khac result = -1, binh thuong result = 0;
         */
        public int CheckNguHanh(string nguhanhso, string nguhanhnguoi)
        {
            InitNguhanh();
            int result = 0;
            for (int i = 0; i < 10; i++)
            {
                if (nguhanh_arr[i, 2].Equals("1")) // Tuong sinh 
                {
                    if ((nguhanh_arr[i, 0] == nguhanhso) && (nguhanh_arr[i, 1] == nguhanhnguoi)) // Sinh nhap: Hanh khac lam loi cho hanh minh. Minh duoc loi
                    {
                        result = 1;
                    }
                    else if ((nguhanh_arr[i, 0] == nguhanhnguoi) && (nguhanh_arr[i, 1] == nguhanhso)) // Sinh xuat. Minh lam loi cho hanh khac, minh bi hai
                    {
                        result = -1;
                    }
                }
                else if (nguhanh_arr[i, 2].Equals("-1")) // Tuong khac
                {
                    if ((nguhanh_arr[i, 0] == nguhanhso) && (nguhanh_arr[i, 1] == nguhanhnguoi)) // Khac nhap: Hanh khac gay ton hai hoac kiem che hanh minh. Minh bi hai
                    {
                        result = -1;
                    }
                    else if ((nguhanh_arr[i, 0] == nguhanhnguoi) && (nguhanh_arr[i, 1] == nguhanhso)) // Khac xuat: Hanh minh kim che hoac gay ton hai hanh khac. Minh ko bi hai
                    {
                        result = 0;
                    }
                }
            }

            return result;
        }

        public string CheckNguHanhSinh(string nguhanhnguoi)
        {
            string nguhanh_str = "";
            for (int i = 0; i < nguhanh_list.Length; i++)
            {
                if (CheckNguHanh(nguhanh_list[i], nguhanhnguoi) == 1)
                {
                    nguhanh_str = nguhanh_list[i] + ",";
                }
            }
            return nguhanh_str;
        }

        public string CheckNguHanhKhac(string nguhanhnguoi)
        {
            string nguhanh_str = "";
            for (int i = 0; i < nguhanh_list.Length; i++)
            {
                if (CheckNguHanh(nguhanh_list[i], nguhanhnguoi) == -1)
                {
                    nguhanh_str += nguhanh_list[i] + ",";
                }
            }
            return nguhanh_str;
        }

        public string NguHanhNamSinh(string namsinh)
        {

            int m_namsinh = Convert.ToInt32(namsinh);
            return nguhanh[(m_namsinh - 34) % 60];
        }

        public string NguHanhDaySo(string number)
        {
            char[] temp = number.ToCharArray();
            short sum = 0;
            string m_nguhanh = "";
            while (temp.Length > 2)
            {
                for (short i = 0; i < temp.Length; i++)
                {
                    sum += Convert.ToInt16(new string(temp[i], 1));
                }
                temp = sum.ToString().ToCharArray();
                sum = 0;
            }
            sum = Convert.ToInt16(new string(temp[0], 1));

            if ((sum == 6) || (sum == 7))
            {
                m_nguhanh = "KIM";
            }
            else if ((sum == 3) || (sum == 4))
            {
                m_nguhanh = "MOC";
            }
            else if ((sum == 2) || (sum == 5) || (sum == 8))
            {
                m_nguhanh = "THO";
            }
            else if (sum == 1)
            {
                m_nguhanh = "THUY";
            }
            else if (sum == 9)
            {
                m_nguhanh = "hoarR";
            }
            return m_nguhanh;
        }

        #endregion

        #region Mau hop tuoi

        public void InitMauHopTuoi()
        {
            mauhoptuoi_arr[0, 0] = "THUY";
            mauhoptuoi_arr[0, 1] = "XANHDATROI,DEN";

            mauhoptuoi_arr[1, 0] = "MOC";
            mauhoptuoi_arr[1, 1] = "XANHLACAY";

            mauhoptuoi_arr[2, 0] = "hoar";
            mauhoptuoi_arr[2, 1] = "DO";

            mauhoptuoi_arr[3, 0] = "THO";
            mauhoptuoi_arr[3, 1] = "VANG";

            mauhoptuoi_arr[4, 0] = "KIM";
            mauhoptuoi_arr[4, 1] = "TRANG";

        }

        public string MauHopTuoi(string namsinh)
        {
            string mau = "";
            string nguhanh_sinh = CheckNguHanhSinh(NguHanhNamSinh(namsinh));
            string[] m_nguhanh = nguhanh_sinh.Split(',');
            for (int i = 0; i < m_nguhanh.Length; i++)
            {
                if (m_nguhanh[i].Trim().Length > 0)
                {
                    for (int j = 0; j < mauhoptuoi_arr.Length; j++)
                    {
                        if (m_nguhanh[i].Equals(mauhoptuoi_arr[j, 0]))
                        {
                            mau = mauhoptuoi_arr[j, 1];
                        }
                    }
                }
            }
            return mau;
        }

        public string MauKhacTuoi(string namsinh)
        {
            string mau = "";
            string nguhanh_khac = CheckNguHanhKhac(NguHanhNamSinh(namsinh));
            string[] m_nguhanh = nguhanh_khac.Split(',');
            for (int i = 0; i < m_nguhanh.Length; i++)
            {
                if (m_nguhanh[i].Trim().Length > 0)
                {
                    for (int j = 0; j < mauhoptuoi_arr.Length; j++)
                    {
                        if (m_nguhanh[i].Equals(mauhoptuoi_arr[j, 0]))
                        {
                            mau = mauhoptuoi_arr[j, 1];
                        }
                    }
                }
            }
            return mau;
        }

        #endregion

        #region Nhip sinh hoc

        public string NhipSinhHoc(DateTime ngaythangnamsinh, DateTime ngaythangnamxem)
        {
            string content = "";
            double sumday = CaculateDate(ngaythangnamsinh, ngaythangnamxem);
            double nhiptritue = sumday % 33;
            double nhipsuckhoe = sumday % 23;
            double nhipsinhduc = sumday % 28;
            double nhiptrucgiac = sumday % 38;
            double nhipthammy = sumday % 43;
            double nhiptamlinh = sumday % 53;
            string ngaymax = "";
            string ngaymin = "";

            //Nhip Tri Tue 33
            content = "xetnhiptritue " + Math.Round(nhiptritue).ToString() + " cuachuky ";
            if (nhiptritue < 8)
            {
                ngaymax = ngaythangnamxem.AddDays(8 - nhiptritue).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(25 - nhiptritue).ToString("ddMMyyyy");
                content = content + " xuthelen semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
                content = content + " seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4); ;
            }
            else if ((nhiptritue > 8) && (nhiptritue < 25))
            {
                ngaymax = ngaythangnamxem.AddDays(41 - nhiptritue).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(25 - nhiptritue).ToString("ddMMyyyy");
                content = content + " xuthexuong seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
                content = content + " semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);

            }
            else
            {
                ngaymax = ngaythangnamxem.AddDays(41 - nhiptritue).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(57 - nhiptritue).ToString("ddMMyyyy");
                content = content + " xuthelen semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
                content = content + " seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
            }
            double sin_nhiptritue = 0;
            nhiptritue = (Math.PI / 180) * nhiptritue;
            sin_nhiptritue = Math.Sin((nhiptritue / 8.25) * 90);
            double phantram_nhiptritue = 0;
            phantram_nhiptritue = Math.Round((sin_nhiptritue + 1) * 100 / 2, 0);
            content = content + " banduoc " + phantram_nhiptritue.ToString() + " phantram tritue ";

            //Nhip suc Khoe 23
            content = content + " xetnhipsuckhoe " + Math.Round(nhipsuckhoe).ToString() + " cuachuky ";
            if (nhipsuckhoe < 6)
            {
                ngaymax = ngaythangnamxem.AddDays(6 - nhipsuckhoe).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(18 - nhipsuckhoe).ToString("ddMMyyyy");
                content = content + " xuthelen semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
                content = content + " seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
            }
            else if ((nhipsuckhoe > 6) && (nhipsuckhoe < 18))
            {
                ngaymax = ngaythangnamxem.AddDays(30 - nhipsuckhoe).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(18 - nhipsuckhoe).ToString("ddMMyyyy");
                content = content + " xuthexuong seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
                content = content + " semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
            }
            else
            {
                ngaymax = ngaythangnamxem.AddDays(30 - nhipsuckhoe).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(42 - nhipsuckhoe).ToString("ddMMyyyy");
                content = content + " xuthelen semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
                content = content + " seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);

            }
            double sin_nhipsuckhoe = 0;
            nhipsuckhoe = (Math.PI / 180) * nhipsuckhoe;
            sin_nhipsuckhoe = Math.Sin((nhipsuckhoe / 5.75) * 90);
            double phantram_nhipsuckhoe = 0;
            phantram_nhipsuckhoe = Math.Round((sin_nhipsuckhoe + 1) * 100 / 2, 0);
            content = content + " banduoc " + phantram_nhipsuckhoe.ToString() + " phantram suckhoe ";

            //Nhip sinh duc 28
            content = content + " xetnhipsinhduc " + Math.Round(nhipsinhduc).ToString() + " cuachuky ";
            if (nhipsinhduc < 7)
            {
                ngaymax = ngaythangnamxem.AddDays(7 - nhipsinhduc).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(21 - nhipsinhduc).ToString("ddMMyyyy");
                content = content + " xuthelen semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
                content = content + " seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
            }
            else if ((nhipsinhduc > 7) && (nhipsinhduc < 21))
            {
                ngaymax = ngaythangnamxem.AddDays(35 - nhipsinhduc).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(21 - nhipsinhduc).ToString("ddMMyyyy");
                content = content + " xuthexuong seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
                content = content + " semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);

            }
            else
            {
                ngaymax = ngaythangnamxem.AddDays(35 - nhipsinhduc).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(49 - nhipsinhduc).ToString("ddMMyyyy");
                content = content + " xuthelen semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
                content = content + " seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
            }
            double sin_nhipsinhduc = 0;
            nhipsinhduc = (Math.PI / 180) * nhipsinhduc;
            sin_nhipsinhduc = Math.Sin((nhipsinhduc / 7) * 90);
            double phantram_nhipsinhduc = 0;
            phantram_nhipsinhduc = Math.Round((sin_nhipsinhduc + 1) * 100 / 2, 0);
            content = content + " banduoc " + phantram_nhipsinhduc.ToString() + " phantram sinhduc ";

            //Nhip truc giac 38
            content = content + " xetnhiptrucgiac " + Math.Round(nhiptrucgiac).ToString() + " cuachuky ";
            if (nhiptrucgiac < 10)
            {
                ngaymax = ngaythangnamxem.AddDays(10 - nhiptrucgiac).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(30 - nhiptrucgiac).ToString("ddMMyyyy");
                content = content + " xuthelen semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
                content = content + " seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
            }
            else if ((nhiptrucgiac > 10) && (nhiptrucgiac < 30))
            {
                ngaymax = ngaythangnamxem.AddDays(50 - nhiptrucgiac).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(30 - nhiptrucgiac).ToString("ddMMyyyy");
                content = content + " xuthexuong seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
                content = content + " semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
            }
            else
            {
                ngaymax = ngaythangnamxem.AddDays(50 - nhiptrucgiac).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(70 - nhiptrucgiac).ToString("ddMMyyyy");
                content = content + " xuthelen semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
                content = content + " seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
            }
            double sin_nhiptrucgiac = 0;
            nhiptrucgiac = (Math.PI / 180) * nhiptrucgiac;
            sin_nhiptrucgiac = Math.Sin((nhiptrucgiac / 9.5) * 90);
            double phantram_nhiptrucgiac = 0;
            phantram_nhiptrucgiac = Math.Round((sin_nhiptrucgiac + 1) * 100 / 2, 0);
            content = content + " banduoc " + phantram_nhiptrucgiac.ToString() + " phantram trucgiac ";

            //Nhip tham my 43
            content = content + " xetnhipthammy " + Math.Round(nhipthammy).ToString() + " cuachuky ";
            if (nhipthammy < 11)
            {
                ngaymax = ngaythangnamxem.AddDays(11 - nhipthammy).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(33 - nhipthammy).ToString("ddMMyyyy");
                content = content + " xuthelen semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
                content = content + " seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);

            }
            else if ((nhipthammy > 11) && (nhipthammy < 33))
            {
                ngaymax = ngaythangnamxem.AddDays(55 - nhipthammy).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(33 - nhipthammy).ToString("ddMMyyyy");
                content = content + " xuthexuong seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
                content = content + " semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);

            }
            else
            {
                ngaymax = ngaythangnamxem.AddDays(55 - nhipthammy).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(77 - nhipthammy).ToString("ddMMyyyy");
                content = content + " xuthelen semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
                content = content + " seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
            }
            double sin_nhipthammy = 0;
            nhipthammy = (Math.PI / 180) * nhipthammy;
            sin_nhipthammy = Math.Sin((nhipthammy / 10.75) * 90);
            double phantram_nhipthammy = 0;
            phantram_nhipthammy = Math.Round((sin_nhipthammy + 1) * 100 / 2, 0);
            content = content + " banduoc " + phantram_nhipthammy.ToString() + " phantram thammy ";

            //Nhip Tam Linh 53
            content = content + " xetnhiptamlinh " + Math.Round(nhiptamlinh).ToString() + " cuachuky ";
            if (nhiptamlinh < 14)
            {
                ngaymax = ngaythangnamxem.AddDays(14 - nhiptamlinh).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(42 - nhiptamlinh).ToString("ddMMyyyy");
                content = content + " xuthelen semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
                content = content + " seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
            }
            else if ((nhiptamlinh > 14) && (nhiptamlinh < 42))
            {
                ngaymax = ngaythangnamxem.AddDays(70 - nhiptamlinh).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(42 - nhiptamlinh).ToString("ddMMyyyy");
                content = content + " xuthexuong seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);
                content = content + " semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);

            }
            else
            {
                ngaymax = ngaythangnamxem.AddDays(70 - nhiptamlinh).ToString("ddMMyyyy");
                ngaymin = ngaythangnamxem.AddDays(98 - nhiptamlinh).ToString("ddMMyyyy");
                content = content + " xuthelen semaxchuky " + ngaymax.Substring(0, 2) + " thang " + ngaymax.Substring(2, 2) + " nam " + ngaymax.Substring(4, 4);
                content = content + " seminchuky " + ngaymin.Substring(0, 2) + " thang " + ngaymin.Substring(2, 2) + " nam " + ngaymin.Substring(4, 4);

            }
            double sin_nhiptamlinh = 0;
            nhiptamlinh = (Math.PI / 180) * nhiptamlinh;
            sin_nhiptamlinh = Math.Sin((nhiptamlinh / 13.25) * 90);
            double phantram_nhiptamlinh = 0;
            phantram_nhiptamlinh = Math.Round((sin_nhiptamlinh + 1) * 100 / 2, 0);
            content = content + " banduoc " + phantram_nhiptamlinh.ToString() + " phantram tamlinh ";
            return content;


        }

        public double CaculateDate(DateTime ngaythangnamsinh, DateTime ngaythangnamxem)
        {
            double sumday = 0;
            int namsinh = ngaythangnamsinh.Year;
            int ngaysinh = ngaythangnamsinh.Day;
            int thangsinh = ngaythangnamsinh.Month;
            int namxem = ngaythangnamxem.Year;
            int ngayxem = ngaythangnamxem.Day;
            int thangxem = ngaythangnamxem.Month;
            int[,] songay_of_thang = new int[12, 2] { { 1, 31 }, { 2, 29 }, { 3, 31 }, { 4, 30 }, { 5, 31 }, { 6, 30 }, { 7, 31 }, { 8, 31 }, { 9, 30 }, { 10, 31 }, { 11, 30 }, { 12, 31 } };

            if (namxem < namsinh) sumday = -1;
            else
            {
                TimeSpan elapsed = ngaythangnamxem.Subtract(ngaythangnamsinh);
                sumday = elapsed.TotalDays;
            }
            return sumday;
        }
        #endregion

        #region 12cung
        //BirthDay=ddMMyyyy      
        public string GetCungByDate(string BirthDay)
        {
            string content = "";
            DateTime d_BirthDay = DateTime.ParseExact(BirthDay, "ddMMyyyy", null);
            if ((d_BirthDay >= DateTime.ParseExact("2103" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)) && (d_BirthDay <= DateTime.ParseExact("2004" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)))
            {
                content = "BACHDUONG";
            }
            else if ((d_BirthDay >= DateTime.ParseExact("2104" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)) && (d_BirthDay <= DateTime.ParseExact("2105" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)))
            {
                content = "KIMNGUU";
            }
            else if ((d_BirthDay >= DateTime.ParseExact("2205" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)) && (d_BirthDay <= DateTime.ParseExact("2106" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)))
            {
                content = "SONGTU";
            }
            else if ((d_BirthDay >= DateTime.ParseExact("2206" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)) && (d_BirthDay <= DateTime.ParseExact("2307" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)))
            {
                content = "CUGIAI";
            }
            else if ((d_BirthDay >= DateTime.ParseExact("2407" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)) && (d_BirthDay <= DateTime.ParseExact("2308" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)))
            {
                content = "SUTU";
            }
            else if ((d_BirthDay >= DateTime.ParseExact("2408" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)) && (d_BirthDay <= DateTime.ParseExact("2309" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)))
            {
                content = "XUNU";
            }
            else if ((d_BirthDay >= DateTime.ParseExact("2409" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)) && (d_BirthDay <= DateTime.ParseExact("2310" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)))
            {
                content = "THIENBINH";
            }
            else if ((d_BirthDay >= DateTime.ParseExact("2410" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)) && (d_BirthDay <= DateTime.ParseExact("2211" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)))
            {
                content = "BOCAP";
            }
            else if ((d_BirthDay >= DateTime.ParseExact("2311" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)) && (d_BirthDay <= DateTime.ParseExact("2112" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)))
            {
                content = "NHANMA";
            }
            else if ((d_BirthDay >= DateTime.ParseExact("2212" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)) || (d_BirthDay <= DateTime.ParseExact("2001" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)))
            {
                content = "MAKET";
            }
            else if ((d_BirthDay >= DateTime.ParseExact("2101" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)) && (d_BirthDay <= DateTime.ParseExact("1902" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)))
            {
                content = "BAOBINH";
            }
            else if ((d_BirthDay >= DateTime.ParseExact("2002" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)) && (d_BirthDay <= DateTime.ParseExact("2003" + d_BirthDay.Year.ToString(), "ddMMyyyy", null)))
            {
                content = "SONGNGU";
            }
            return content;
        }
        //get file ban la
        public string GetPathFileBanLa(string Cung, string gioitinh, string rootPath)
        {
            string path = "";
            if (gioitinh == "0")
            {
                if (Cung == "BACHDUONG")
                {
                    path = rootPath + "\\BanLa\\banla_nam_bachduong.wav";
                }
                else if (Cung == "KIMNGUU")
                {
                    path = rootPath + "\\BanLa\\banla_nam_kimnguu.wav";
                }
                else if (Cung == "SONGTU")
                {
                    path = rootPath + "\\BanLa\\banla_nam_songtu.wav";
                }
                else if (Cung == "CUGIAI")
                {
                    path = rootPath + "\\BanLa\\banla_nam_cugiai.wav";
                }
                else if (Cung == "SUTU")
                {
                    path = rootPath + "\\BanLa\\banla_nam_sutu.wav";
                }
                else if (Cung == "XUNU")
                {
                    path = rootPath + "\\BanLa\\banla_nam_xunu.wav";
                }
                else if (Cung == "THIENBINH")
                {
                    path = rootPath + "\\BanLa\\banla_nam_thienbinh.wav";
                }
                else if (Cung == "BOCAP")
                {
                    path = rootPath + "\\BanLa\\banla_nam_bocap.wav";
                }
                else if (Cung == "NHANMA")
                {
                    path = rootPath + "\\BanLa\\banla_nam_nhanma.wav";
                }
                else if (Cung == "MAKET")
                {
                    path = rootPath + "\\BanLa\\banla_nam_maket.wav";
                }
                else if (Cung == "BAOBINH")
                {
                    path = rootPath + "\\BanLa\\banla_nam_baobinh.wav";
                }
                else if (Cung == "SONGNGU")
                {
                    path = rootPath + "\\BanLa\\banla_nam_songngu.wav";
                }
            }
            else
            {
                if (Cung == "BACHDUONG")
                {
                    path = rootPath + "\\BanLa\\banla_nu_bachduong.wav";
                }
                else if (Cung == "KIMNGUU")
                {
                    path = rootPath + "\\BanLa\\banla_nu_kimnguu.wav";
                }
                else if (Cung == "SONGTU")
                {
                    path = rootPath + "\\BanLa\\banla_nu_songtu.wav";
                }
                else if (Cung == "CUGIAI")
                {
                    path = rootPath + "\\BanLa\\banla_nu_cugiai.wav";
                }
                else if (Cung == "SUTU")
                {
                    path = rootPath + "\\BanLa\\banla_nu_sutu.wav";
                }
                else if (Cung == "XUNU")
                {
                    path = rootPath + "\\BanLa\\banla_nu_xunu.wav";
                }
                else if (Cung == "THIENBINH")
                {
                    path = rootPath + "\\BanLa\\banla_nu_thienbinh.wav";
                }
                else if (Cung == "BOCAP")
                {
                    path = rootPath + "\\BanLa\\banla_nu_bocap.wav";
                }
                else if (Cung == "NHANMA")
                {
                    path = rootPath + "\\BanLa\\banla_nu_nhanma.wav";
                }
                else if (Cung == "MAKET")
                {
                    path = rootPath + "\\BanLa\\banla_nu_maket.wav";
                }
                else if (Cung == "BAOBINH")
                {
                    path = rootPath + "\\BanLa\\banla_nu_baobinh.wav";
                }
                else if (Cung == "SONGNGU")
                {
                    path = rootPath + "\\BanLa\\banla_nu_songngu.wav";
                }
            }
            return path;
        }



        #endregion 12cung

        #region Ngaydep

        public void InitThapNhiBatTu()
        {
            thapnhibattu[0] = "saogiac";
            thapnhibattu[1] = "saocang";
            thapnhibattu[2] = "saode";
            thapnhibattu[3] = "saophong";
            thapnhibattu[4] = "saotam";
            thapnhibattu[5] = "saovi";
            thapnhibattu[6] = "saoco";
            thapnhibattu[7] = "saodau";
            thapnhibattu[8] = "saonguu";
            thapnhibattu[9] = "saonu";
            thapnhibattu[10] = "saohu";
            thapnhibattu[11] = "saonguy";
            thapnhibattu[12] = "saothat";
            thapnhibattu[13] = "saobich";
            thapnhibattu[14] = "saokhue";
            thapnhibattu[15] = "saolau";
            thapnhibattu[16] = "saovij";
            thapnhibattu[17] = "saomao";
            thapnhibattu[18] = "saotat";
            thapnhibattu[19] = "saochuy";
            thapnhibattu[20] = "saosam";
            thapnhibattu[21] = "saotinhr";
            thapnhibattu[22] = "saoquy";
            thapnhibattu[23] = "saolieu";
            thapnhibattu[24] = "saotinh";
            thapnhibattu[25] = "saotruong";
            thapnhibattu[26] = "saoduc";
            thapnhibattu[27] = "saochan";

        }

        public string GetSao(DateTime dt)
        {
            InitThapNhiBatTu();
            string returnSao = "";
            TimeSpan elapsed = dt.Subtract(DateTime.ParseExact("25011900", "ddMMyyyy", null));
            int index = (Int32)(elapsed.TotalDays % 28);
            returnSao = thapnhibattu[index];
            return returnSao;
        }

        public void InitNgayHoangDao()
        {
            ngayhoangdao[0] = "thanhlonghoangdao";
            ngayhoangdao[1] = "minhduonghoangdao";
            ngayhoangdao[2] = "thienhinhhacdao";
            ngayhoangdao[3] = "chutuochacdao";
            ngayhoangdao[4] = "kimquyhoangdao";
            ngayhoangdao[5] = "baoquanghoangdao";
            ngayhoangdao[6] = "bachhohacdao";
            ngayhoangdao[7] = "ngocduonghoangdao";
            ngayhoangdao[8] = "thienlaohacdao";
            ngayhoangdao[9] = "nguyenvuhacdao";
            ngayhoangdao[10] = "tumenhhoangdao";
            ngayhoangdao[11] = "cautranhacdao";
        }

        public string GetNgayHoangDao(DateTime dt)
        {
            InitNgayHoangDao();
            string HoangDaoReturn = "";
            int mm = 0;
            int yyyy = 0;
            int dd = 0;
            VietnameseCalendar vnCal = new VietnameseCalendar();
            vnCal.FromDateTime(dt, out yyyy, out mm, out dd);
            string ngay = vnCal.GetDayName(dt);
            string thang = vnCal.GetMonthName(yyyy, mm);
            int ngayid = 0;
            int thangid = 0;
            if (ngay.Contains("Tý"))
            {
                ngayid = 1;
            }
            else if (ngay.Contains("Sửu"))
            {
                ngayid = 2;
            }
            else if (ngay.Contains("Dần"))
            {
                ngayid = 3;
            }
            else if (ngay.Contains("Mão"))
            {
                ngayid = 4;
            }
            else if (ngay.Contains("Thìn"))
            {
                ngayid = 5;
            }
            else if (ngay.Contains("Tỵ"))
            {
                ngayid = 6;
            }
            else if (ngay.Contains("Ngọ"))
            {
                ngayid = 7;
            }
            else if (ngay.Contains("Mùi"))
            {
                ngayid = 8;
            }
            else if (ngay.Contains("Thân"))
            {
                ngayid = 9;
            }
            else if (ngay.Contains("Dậu"))
            {
                ngayid = 10;
            }
            else if (ngay.Contains("Tuất"))
            {
                ngayid = 11;
            }
            else if (ngay.Contains("Hợi"))
            {
                ngayid = 12;
            }

            if (thang.Contains("Tý"))
            {
                thangid = 1;
            }
            else if (thang.Contains("Sửu"))
            {
                thangid = 2;
            }
            else if (thang.Contains("Dần"))
            {
                thangid = 3;
            }
            else if (thang.Contains("Mão"))
            {
                thangid = 4;
            }
            else if (thang.Contains("Thìn"))
            {
                thangid = 5;
            }
            else if (thang.Contains("Tỵ"))
            {
                thangid = 6;
            }
            else if (thang.Contains("Ngọ"))
            {
                thangid = 7;
            }
            else if (thang.Contains("Mùi"))
            {
                thangid = 8;
            }
            else if (thang.Contains("Thân"))
            {
                thangid = 9;
            }
            else if (thang.Contains("Dậu"))
            {
                thangid = 10;
            }
            else if (thang.Contains("Tuất"))
            {
                thangid = 11;
            }
            else if (thang.Contains("Hợi"))
            {
                thangid = 12;
            }

            for (int i = 1; i < 13; i++)
            {
                if ((thangid == i) && (ngayid % 12 == (i * 2 + 7) % 12))
                {
                    HoangDaoReturn = ngayhoangdao[0];
                }
                else if ((thangid == i) && (ngayid % 12 == (i * 2 + 8) % 12))
                {
                    HoangDaoReturn = ngayhoangdao[1];
                }
                else if ((thangid == i) && (ngayid % 12 == (i * 2 + 9) % 12))
                {
                    HoangDaoReturn = ngayhoangdao[2];
                }
                else if ((thangid == i) && (ngayid % 12 == (i * 2 + 10) % 12))
                {
                    HoangDaoReturn = ngayhoangdao[3];
                }
                else if ((thangid == i) && (ngayid % 12 == (i * 2 + 11) % 12))
                {
                    HoangDaoReturn = ngayhoangdao[4];
                }
                else if ((thangid == i) && (ngayid % 12 == (i * 2) % 12))
                {
                    HoangDaoReturn = ngayhoangdao[5];
                }
                else if ((thangid == i) && (ngayid % 12 == (i * 2 + 1) % 12))
                {
                    HoangDaoReturn = ngayhoangdao[6];
                }
                else if ((thangid == i) && (ngayid % 12 == (i * 2 + 2) % 12))
                {
                    HoangDaoReturn = ngayhoangdao[7];
                }
                else if ((thangid == i) && (ngayid % 12 == (i * 2 + 3) % 12))
                {
                    HoangDaoReturn = ngayhoangdao[8];
                }
                else if ((thangid == i) && (ngayid % 12 == (i * 2 + 4) % 12))
                {
                    HoangDaoReturn = ngayhoangdao[9];
                }
                else if ((thangid == i) && (ngayid % 12 == (i * 2 + 5) % 12))
                {
                    HoangDaoReturn = ngayhoangdao[10];
                }
                else if ((thangid == i) && (ngayid % 12 == (i * 2 + 6) % 12))
                {
                    HoangDaoReturn = ngayhoangdao[11];
                }
            }
            //HoangDaoReturn = ngayid.ToString()+thangid.ToString();
            return HoangDaoReturn;
        }

        public string GetContentNgay(DateTime dt)
        {
            string Content = " ngayvuanhap ";
            Content += dt.Day.ToString() + " thang " + dt.Month.ToString() + " amlich ";
            int yyyy = 0;
            int mm = 0;
            int dd = 0;
            VietnameseCalendar vnCal = new VietnameseCalendar();
            vnCal.FromDateTime(dt, out yyyy, out mm, out dd);
            Content += dd.ToString() + " thang " + mm.ToString();
            string can = "";
            string chi = "";
            ConvertCanChi(vnCal.GetDayName(dt), out can, out chi);
            Content += " tucngay " + can + " " + chi;
            ConvertCanChi(vnCal.GetMonthName(yyyy, mm), out can, out chi);
            Content += " thang " + can + " " + chi;
            ConvertCanChi(vnCal.GetYearName(yyyy), out can, out chi);
            Content += " nam " + can + " " + chi;
            Content += " langay " + GetNgayHoangDao(dt);
            Content += " thapnhibattu " + GetSao(dt);

            string giohoangdao_new = "";
            string giohoangdao = "";
            giohoangdao = vnCal.GetPropitiousHour(dt);
            string[] listgiohoangdao = giohoangdao.Split(',');
            for (int i = 0; i < listgiohoangdao.Length; i++)
            {
                giohoangdao_new += " " + ConvertGioHoangDao(listgiohoangdao[i]);
            }
            Content += " giohoangdao " + giohoangdao_new;
            return Content;
        }

        public void ConvertCanChi(string date, out string can, out string chi)
        {
            can = "";
            chi = "";
            if (date.Contains("Tý"))
            {
                chi = "chity";
            }
            else if (date.Contains("Sửu"))
            {
                chi = "chisuu";
            }
            else if (date.Contains("Dần"))
            {
                chi = "chidan";
            }
            else if (date.Contains("Mão"))
            {
                chi = "chimao";
            }
            else if (date.Contains("Thìn"))
            {
                chi = "chithin";
            }
            else if ((date.Contains("Tỵ")) || (date.Contains("Tị")))
            {
                chi = "chiti";
            }
            else if (date.Contains("Ngọ"))
            {
                chi = "chingo";
            }
            else if (date.Contains("Mùi"))
            {
                chi = "chimui";
            }
            else if (date.Contains("Thân"))
            {
                chi = "chithan";
            }
            else if (date.Contains("Dậu"))
            {
                chi = "chidau";
            }
            else if (date.Contains("Tuất"))
            {
                chi = "chituat";
            }
            else if (date.Contains("Hợi"))
            {
                chi = "chihoi";
            }
            if (date.Contains("Ất"))
            {
                can = "canat";
            }
            else if (date.Contains("Giáp"))
            {
                can = "cangiap";
            }
            else if (date.Contains("Bính"))
            {
                can = "canbinh";
            }
            else if (date.Contains("Đinh"))
            {
                can = "candinh";
            }
            else if (date.Contains("Mậu"))
            {
                can = "canmau";
            }
            else if (date.Contains("Kỷ"))
            {
                can = "canky";
            }
            else if (date.Contains("Canh"))
            {
                can = "cancanh";
            }
            else if (date.Contains("Tân"))
            {
                can = "cantan";
            }
            else if (date.Contains("Nhâm"))
            {
                can = "cannham";
            }
            else if (date.Contains("Quý"))
            {
                can = "canquy";
            }
        }

        public string ConvertGioHoangDao(string times)
        {
            string newContent = "";
            string chi = "";
            if (times.Contains("Tý"))
            {
                chi = "chitygio";
            }
            else if (times.Contains("Sửu"))
            {
                chi = "chisuugio";
            }
            else if (times.Contains("Dần"))
            {
                chi = "chidangio";
            }
            else if (times.Contains("Mão"))
            {
                chi = "chimaogio";
            }
            else if (times.Contains("Thìn"))
            {
                chi = "chithingio";
            }
            else if (times.Contains("Tỵ"))
            {
                chi = "chitigio";
            }
            else if (times.Contains("Ngọ"))
            {
                chi = "chingogio";
            }
            else if (times.Contains("Mùi"))
            {
                chi = "chimuigio";
            }
            else if (times.Contains("Thân"))
            {
                chi = "chithangio";
            }
            else if (times.Contains("Dậu"))
            {
                chi = "chidaugio";
            }
            else if (times.Contains("Tuất"))
            {
                chi = "chituatgio";
            }
            else if (times.Contains("Hợi"))
            {
                chi = "chihoigio";
            }
            newContent = chi;

            return newContent;
        }
        #endregion Ngaydep

        #region Today

        public string GetFileCungHoangDao(string BirthDay, string ToDay)
        {
            string PathFile = "";
            DateTime dt = DateTime.ParseExact(BirthDay, "ddMMyyyy", null);
            DateTime today = DateTime.ParseExact(ToDay, "ddMMyyyy", null);
            string cung = GetCungByDate(BirthDay);
            DataSet ds = new DataSet();
            // ds = m_db.Get_TODAY_Fortune(today, cung);
            PathFile = ds.Tables[0].Rows[0]["Filename"].ToString();
            return PathFile;
        }

        public string[] GetFileNhipSinhHoc(string BirthDay, string ToDay)
        {
            string[] PathFile = new string[2];
            DateTime dt = DateTime.ParseExact(BirthDay, "ddMMyyyy", null);
            DateTime today = DateTime.ParseExact(ToDay, "ddMMyyyy", null);
            string cung = GetCungByDate(BirthDay);
            DataSet ds_cunghoangdao = new DataSet();
            //ds_cunghoangdao = m_db.Get_TODAY_Fortune(today, cung);

            double sumday = CaculateDate(dt, today);

            double[] NhipSinhHoc = new double[5];
            NhipSinhHoc[0] = GetPhanTramNhipSinhHoc(sumday, 33);//TriTue
            NhipSinhHoc[1] = GetPhanTramNhipSinhHoc(sumday, 23);//SucKhoe
            NhipSinhHoc[2] = GetPhanTramNhipSinhHoc(sumday, 28);//TinhCam
            NhipSinhHoc[3] = GetPhanTramNhipSinhHoc(sumday, 53);//TamLinh
            NhipSinhHoc[4] = GetPhanTramNhipSinhHoc(sumday, 43);//ThamMy
            //Check with trong so nhip sinh hoc
            if (Int32.Parse(ds_cunghoangdao.Tables[0].Rows[0]["NhipTriTue"].ToString()) == 1)
            {
                NhipSinhHoc[0] = -1;
            }
            if (Int32.Parse(ds_cunghoangdao.Tables[0].Rows[0]["NhipSucKhoe"].ToString()) == 1)
            {
                NhipSinhHoc[1] = -1;
            }
            if (Int32.Parse(ds_cunghoangdao.Tables[0].Rows[0]["NhipTinhCam"].ToString()) == 1)
            {
                NhipSinhHoc[2] = -1;
            }
            if (Int32.Parse(ds_cunghoangdao.Tables[0].Rows[0]["NhipThamMy"].ToString()) == 1)
            {
                NhipSinhHoc[3] = -1;
            }

            if (Int32.Parse(ds_cunghoangdao.Tables[0].Rows[0]["NhipTamLinh"].ToString()) == 1)
            {
                NhipSinhHoc[4] = -1;
            }
            string StringNhipMax = "";
            string StringNhipMin = "";
            double IntNhipMax = 0;
            double IntNhipMin = 0;
            int CycleMax = 0;
            int CycleMin = 0;
            IntNhipMax = GetMax(NhipSinhHoc);
            IntNhipMin = GetMin(NhipSinhHoc);

            if (IntNhipMax == NhipSinhHoc[0])
            {
                StringNhipMax = "TRITUE";
                CycleMax = 33;
            }
            else if (IntNhipMax == NhipSinhHoc[1])
            {
                StringNhipMax = "SUCKHOE";
                CycleMax = 23;
            }
            else if (IntNhipMax == NhipSinhHoc[2])
            {
                StringNhipMax = "TINHCAM";
                CycleMax = 28;
            }
            else if (IntNhipMax == NhipSinhHoc[3])
            {
                StringNhipMax = "TAMLINH";
                CycleMax = 53;
            }
            else if (IntNhipMax == NhipSinhHoc[4])
            {
                StringNhipMax = "THAMMY";
                CycleMax = 43;
            }

            if (IntNhipMin == NhipSinhHoc[0])
            {
                StringNhipMin = "TRITUE";
                CycleMin = 33;
            }
            else if (IntNhipMin == NhipSinhHoc[1])
            {
                StringNhipMin = "SUCKHOE";
                CycleMin = 23;
            }
            else if (IntNhipMin == NhipSinhHoc[2])
            {
                StringNhipMin = "TINHCAM";
                CycleMin = 28;
            }
            else if (IntNhipMin == NhipSinhHoc[3])
            {
                StringNhipMin = "TAMLINH";
                CycleMin = 53;
            }
            else if (IntNhipMin == NhipSinhHoc[4])
            {
                StringNhipMin = "THAMMY";
                CycleMin = 43;
            }
            DataSet ds_NhipSinhHoc = new DataSet();
            //ds_NhipSinhHoc = m_db.Get_TODAYNHIPSINHHOC_Fortune(StringNhipMax,(Int32)IntNhipMax, GetUpDownNhipSinhHoc(sumday, CycleMax));
            PathFile[0] = ds_NhipSinhHoc.Tables[0].Rows[0]["FileName"].ToString();
            ds_NhipSinhHoc.Clear();
            //ds_NhipSinhHoc = m_db.Get_TODAYNHIPSINHHOC_Fortune(StringNhipMin, (Int32)IntNhipMin, GetUpDownNhipSinhHoc(sumday, CycleMin));
            PathFile[1] = ds_NhipSinhHoc.Tables[0].Rows[0]["FileName"].ToString();

            ds_cunghoangdao.Clear();
            ds_NhipSinhHoc.Clear();
            return PathFile;
        }

        public double GetPhanTramNhipSinhHoc(double Day, double TotalDay)
        {
            Day = Math.Floor(Day) % TotalDay;
            double sin_nhip = 0;
            Day = (Math.PI / 180) * Day;
            sin_nhip = Math.Sin((Day / TotalDay) * 360);
            double phantram_nhipsinhhoc = 0;
            phantram_nhipsinhhoc = Math.Round((sin_nhip + 1) * 100 / 2, 0);
            return phantram_nhipsinhhoc;
        }

        public int GetUpDownNhipSinhHoc(double Day, double TotalDay)
        {
            int result = 1;
            Day = Math.Floor(Day) % TotalDay;
            double quarter = TotalDay / 4;
            if ((Day > quarter) && (Day < quarter * 3))
            {
                result = 0;
            }
            return result;
        }

        public static double GetMax(double[] DoubleCollection)
        {
            double max = double.MinValue;
            foreach (double i in DoubleCollection)
            {
                if (i > max)
                {
                    max = i;
                }
            }
            return max;
        }

        public static double GetMin(double[] DoubleCollection)
        {
            double min = double.MaxValue;
            foreach (double i in DoubleCollection)
            {
                if ((i < min) && (i > 0))
                {
                    min = i;
                }
            }
            return min;
        }

        #endregion Today

    }
}
